#include<bits/stdc++.h>
using namespace std;
const int MAXN=1e4+10;
int n,m,sq,nn,a[MAXN],col[MAXN],b[MAXN],pos[MAXN],last[1000010];
void reset(int x)
{
    int l=(x-1)*sq+1,r=min(n,x*sq);
    for(int i=l;i<=r;++i)b[i]=a[i];
    sort(b+l,b+r+1);
    return;
}
int find(int x,int v)
{
    int l=(x-1)*sq+1,r=min(n,x*sq);
    return lower_bound(b+l,b+r+1,v)-b-l;
}
void update(int x,int v)
{
    col[x]=v;
    for(int i=1;i<=n;i++)last[col[i]]=0;
    for(int i=1;i<=n;++i)
    {
        int t=a[i];
        a[i]=last[col[i]];
        if(t!=a[i])reset(pos[i]);
        last[col[i]]=i;
    }
    return;
}
int query(int x,int y)
{
    int ret=0;
    if(pos[x]==pos[y])
    {
        for(int i=x;i<=y;++i)
            if(a[i]<x)++ret;
    }
    else
    {
        int t=min(pos[x]*sq,n);
        for(int i=x;i<=t;++i)
            if(a[i]<x)++ret;
        t=(pos[y]-1)*sq+1;
        for(int i=t;i<=y;++i)
            if(a[i]<x)++ret;
    }
    for(int i=pos[x]+1;i<pos[y];++i)
        ret+=find(i,x);
    return ret;
}
int main()
{
    scanf("%d%d",&n,&m);
    sq=sqrt(n);
    if(!(n%sq))nn=n/sq;
    else nn=n/sq+1;
    for(int i=1;i<=n;++i)
    {
        scanf("%d",&col[i]);
        a[i]=last[col[i]];
        last[col[i]]=i;
        pos[i]=(i-1)/sq+1;
    }
    for(int i=1;i<=nn;++i)reset(i);
    while(m--)
    {
        char t1[3];
        int t2,t3;
        scanf("%s",t1);
        scanf("%d%d",&t2,&t3);
        if(t1[0]=='R')update(t2,t3);
        else printf("%d\n",query(t2,t3));
    }
    return 0;
}
